package com.company.nuwa.redis.wrapper;

import cn.hutool.core.util.NumberUtil;
import cn.hutool.core.util.ObjectUtil;
import com.company.nuwa.common.utils.JsonUtils;

import java.util.List;
import java.util.Objects;

/**
 * <p></p >
 *
 * @author Nikola Tesla
 * @version 1.0
 * @date 2021/1/11 13:53
 */
public interface ValueConverter {

    String EMPTY = "";

    /**
     * 获取String类型的值
     *
     * @param t
     * @param <T>
     * @return
     */
    static <T> String getString(T t) {
        if (Objects.isNull(t)) {
            return EMPTY;
        }
        if (ObjectUtil.isBasicType(t) || t instanceof String) {
            return t.toString();
        } else {
            return JsonUtils.objectToJson(t);
        }
    }

    /**
     * 获取Bean
     *
     * @param value
     * @param classType
     * @param <T>
     * @return
     */
    static <T> T getBean(String value, Class<T> classType) {
        if (Objects.isNull(value)) {
            return null;
        }
        if (Number.class.isAssignableFrom(classType)) {
            return (T) NumberUtil.parseNumber(value);
        }
        if (classType == String.class) {
            return (T) value;
        }
        return JsonUtils.jsonToObject(value, classType);
    }

    /**
     * 获取Bean List
     *
     * @param value
     * @param classType
     * @param <T>
     * @return
     */
    static <T> List<T> getBeanList(String value, Class<T> classType) {
        if (Objects.isNull(value)) {
            return null;
        }
        return JsonUtils.jsonToList(value, classType);
    }

    /**
     * 对象序列化 string
     * 1、基础类型，直接转String
     * 2、包装类型，转json String
     *
     * @param obj
     * @return
     */
    static String serializeToString(Object obj) {
        if (Objects.isNull(obj)) {
            return null;
        }
        if (obj instanceof String) {
            return obj.toString();
        }
        if (obj instanceof Number) {
            return obj.toString();
        }
        return JsonUtils.objectToJson(obj);
    }

}
